package com.zlm.app.emp.service;

import com.zlm.common.entity.SysEmpDO;
import com.zlm.common.dto.userEmp.*;
import com.zlm.common.dto.userEmp.LoginAppParamsDto;
import com.zlm.common.dto.JsonResultDto;
import com.zlm.common.dto.QqResponseDto;
import com.zlm.common.dto.WechatResultDto;
import com.zlm.common.entity.EmpUserEducationDO;
import com.zlm.common.entity.EmpUserExperienceDO;
import com.zlm.common.entity.SysFeedbackDO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 调用zlm-user-emp内部服务
 * @Author: duyufu
 * @Date: 2019/4/19 11:16
 */
@FeignClient(value = "zlm-user-emp",fallback = UserEmpFallback.class)
@Service
public interface UserEmpService {

    /**
     * 根据手机号和密码获取用户信息
     * @param mobile
     * @param password
     * @return
     */
    @GetMapping("/emp/queryEmpByMobileAndPassword")
    JsonResultDto queryEmpByMobileAndPassword(@RequestParam("mobile") String mobile,
                                          @RequestParam("password") String password);

    /**
     * 登陆
     * @param mobile
     * @return
     */
    @GetMapping("/login/loginEmp")
    JsonResultDto loginEmp(@RequestParam("mobile") String mobile);

    /**
     * 发送验证码
     * @param mobile
     * @return
     */
    @GetMapping("/activation/sendActivation")
    JsonResultDto sendActivation(@RequestParam("mobile") String mobile);

    /**
     * 是否存在手机号
     * @param mobile
     * @return
     */
    @GetMapping("/emp/isExistMobile")
    JsonResultDto isExistMobile(@RequestParam("mobile") String mobile);

    /**
     * 校验验证码
     * @param activationCode
     * @param mobile
     * @return
     */
    @GetMapping("/activation/checkActivation")
    JsonResultDto checkActivation(@RequestParam("activationCode") String activationCode, @RequestParam("mobile") String mobile);

    /**
     * 手机密码注册
     * @param mobile
     * @param password
     * @return
     */
    @GetMapping("/login/registerEmp")
    JsonResultDto registerEmp(@RequestParam("mobile") String mobile, @RequestParam("password") String password);

    /**
     * 手机验证码登录
     * @param mobile
     * @return
     */
    @GetMapping("/login/activationLogin")
    JsonResultDto activationLogin(@RequestParam("mobile") String mobile);

    /**
     * 查询用户
     * @param emp
     * @return
     */
    @PostMapping("/emp/queryEmp")
    JsonResultDto queryEmp(SysEmpDO emp);

    /**
     * 微信注册
     * @param userInfo
     * @return
     */
    @PostMapping("/login/wechatRegisterEmp")
    JsonResultDto wechatRegisterEmp(WechatResultDto userInfo);

    /**
     * QQ注册
     * @param userInfo
     * @return
     */
    @PostMapping("/login/qqRegisterEmp")
    JsonResultDto qqRegisterEmp(QqResponseDto userInfo);

    /**
     * 腾讯登录
     * @param emp
     * @return
     */
    @PostMapping("/login/tencentLogin")
    JsonResultDto tencentLogin(SysEmpDO emp);

    /**
     * 绑定手机号
     * @param loginAppParamsDto
     * @return
     */
    @PostMapping("/login/bindMobile")
    JsonResultDto bindMobile(LoginAppParamsDto loginAppParamsDto);

    /**
     * 修改密码
     * @param mobile
     * @param password
     * @return
     */
    @GetMapping("/emp/updatePassword")
    JsonResultDto updatePassword(@RequestParam("mobile") String mobile, @RequestParam("password") String password);

    /**
     * 获取轮播图
     * @param type
     * @return
     */
    @GetMapping("/banner/getSysBannerByType")
    JsonResultDto getSysBannerByType(@RequestParam("type") Integer type);

    /**
     * 获取行业
     * @return
     */
    @GetMapping("/industry/getAllIndustry")
    JsonResultDto getAllIndustry();

    /**
     * 获取职位
     * @param positionParamsDto
     * @return
     */
    @PostMapping("/position/getPositionList")
    JsonResultDto getPositionList(PositionParamsDto positionParamsDto);

    /**
     * 获取职位详情
     * @param pracId
     * @return
     */
    @GetMapping("/position/getPosition")
    JsonResultDto getPosition(@RequestParam("token") String token, @RequestParam("pracId") Integer pracId);

    /**
     * 获取公司详情
     * @param orgId
     * @return
     */
    @GetMapping("/org/getSysOrg")
    JsonResultDto getSysOrg(@RequestParam("token")String token,@RequestParam("orgId") Integer orgId);

    /**
     * 获取城市列表
     * @return
     */
    @GetMapping("/area/queryAllCity")
    JsonResultDto queryAllCity();

    /**
     * 获取地级市
     * @return
     */
    @GetMapping("/area/queryPrefectureLevelCity")
    JsonResultDto queryPrefectureLevelCity();

    /**
     * 获取登录用户
     * @param token
     * @return
     */
    @GetMapping("/token/getLoginUser")
    JsonResultDto getLoginUser(@RequestParam("token") String token);

    /**
     * 收藏/取消收藏职位
     * @param operationCode
     * @param pracId
     * @param empId
     * @return
     */
    @GetMapping("/empPostCollect/saveEmpPostCollect")
    JsonResultDto saveEmpPostCollect(@RequestParam("operationCode") Integer operationCode,@RequestParam("pracId") Integer pracId,@RequestParam("empId") Integer empId);

    /**
     * 收藏/取消收藏公司
     * @param operationCode
     * @param orgId
     * @param empId
     * @return
     */
    @GetMapping("/empOrgCollect/saveEmpOrgCollect")
    JsonResultDto saveEmpOrgCollect(@RequestParam("operationCode") Integer operationCode,@RequestParam("orgId") Integer orgId,@RequestParam("empId") Integer empId);

    /**
     * 分页获取职业顾问
     * @param pageNumber
     * @param pageSize
     * @param token
     * @param lng
     * @param lat
     * @return
     */
    @GetMapping("/partner/queryLocalPartner")
    JsonResultDto queryLocalPartner(@RequestParam("pageNumber") Integer pageNumber,
                                    @RequestParam("pageSize") Integer pageSize,
                                    @RequestParam("token") String token,
                                    @RequestParam("lng") Double lng,
                                    @RequestParam("lat")Double lat);

    /**
     * 添加（删除）职业顾问
     * @param operationCode
     * @param partId
     * @param empId
     * @return
     */
    @GetMapping("/underling/editLocalPartner")
    JsonResultDto editLocalPartner(@RequestParam("operationCode") Integer operationCode,
                                   @RequestParam("partId") Integer partId,@RequestParam("empId") Integer empId);

    /**
     * 分页获取明星企业
     * @param orgParamsDto
     * @return
     */
    @PostMapping("/org/queryStarEnterprise")
    JsonResultDto queryStarEnterprise(OrgParamsDto orgParamsDto);

    /**
     * 报名
     * @param pracId
     * @param empId
     * @return
     */
    @GetMapping("/sign/empSignUp")
    JsonResultDto empSignUp(@RequestParam("pracId") Integer pracId,@RequestParam("empId") Integer empId);

    /**
     * 获取用户个人信息
     * @param empId
     * @return
     */
    @GetMapping("/emp/getEmpInfo")
    JsonResultDto getEmpInfo(@RequestParam("empId") Integer empId);

    /**
     * 添加/修改用户工作经历
     * @param empUserExperienceDO
     * @return
     */
    @PostMapping("/empUserExperience/saveUserExperience")
    JsonResultDto saveUserExperience(EmpUserExperienceDO empUserExperienceDO);

    /**
     * 删除工作经历
     * @param empId
     * @param eid
     * @return
     */
    @GetMapping("/empUserExperience/deleteUserExperience")
    JsonResultDto deleteUserExperience(@RequestParam("empId")Integer empId,@RequestParam("eid") Integer eid);

    /**
     * 添加/修改用户教育经历
     * @param empUserEducationDO
     * @return
     */
    @PostMapping("/empUserEducation/saveUserEducation")
    JsonResultDto saveUserEducation(EmpUserEducationDO empUserEducationDO);

    /**
     * 删除教育经历
     * @param empId
     * @param eid
     * @return
     */
    @GetMapping("/empUserEducation/deleteUserEducation")
    JsonResultDto deleteUserEducation(@RequestParam("empId")Integer empId,@RequestParam("eid") Integer eid);

    /**
     * 保存用户信息
     * @param empInfoParamsDto
     * @return
     */
    @PostMapping("/emp/saveEmpInfo")
    JsonResultDto saveEmpInfo(EmpInfoParamsDto empInfoParamsDto);

    /**
     * 获取用户简历
     * @param empId
     * @return
     */
    @GetMapping("/resume/getEmpResume")
    JsonResultDto getEmpResume(@RequestParam("empId")Integer empId);

    /**
     * 获取所有职位列表
     * @param category
     * @return
     */
    @GetMapping("/basPost/getAllPostMenu")
    JsonResultDto getAllPostMenu(@RequestParam("category")Integer category);

    /**
     * 保存用户需求
     * @param empResumeParamsDto
     * @return
     */
    @PostMapping("/resume/saveEmpResume")
    JsonResultDto saveEmpResume(EmpResumeParamsDto empResumeParamsDto);

    /**
     * 获取用户企业收藏列表
     * @param orgCollectParamsDto
     * @return
     */
    @PostMapping("/empOrgCollect/queryEmpOrgCollect")
    JsonResultDto queryEmpOrgCollect(OrgCollectParamsDto orgCollectParamsDto);

    /**
     * 获取用户职位收藏列表
     * @param positionCollectParamsDto
     * @return
     */
    @PostMapping("/empPostCollect/queryEmpPostCollect")
    JsonResultDto queryEmpPostCollect(PositionCollectParamsDto positionCollectParamsDto);

    /**
     * 获取用户求职意向
     * @param empId
     * @return
     */
    @GetMapping("/resume/getEmpPostResume")
    JsonResultDto getEmpPostResume(@RequestParam("empId")Integer empId);

    /**
     * 获取我的职业顾问
     * @param empId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    @GetMapping("/partner/queryMyPartner")
    JsonResultDto queryMyPartner(@RequestParam("empId")Integer empId,@RequestParam("pageNumber")Integer pageNumber,@RequestParam("pageSize")Integer pageSize);

    /**
     * 根据token修改密码
     * @param empId
     * @param oldPassword
     * @param newPassword
     * @return
     */
    @GetMapping("/emp/updatePasswordByToken")
    JsonResultDto updatePasswordByToken(@RequestParam("empId")Integer empId,@RequestParam("oldPassword") String oldPassword,
                                        @RequestParam("newPassword")String newPassword);

    /**
     * 获取指定日期考勤
     * @param empId
     * @param punchDate
     * @param workTimeId
     * @return
     */
    @GetMapping("/empPunch/queryEmpPunch")
    JsonResultDto queryEmpPunch(@RequestParam("empId") Integer empId,@RequestParam("punchDate") String punchDate,
            @RequestParam("workTimeId") Integer workTimeId);

    /**
     * 获取班制列表
     * @param empId
     * @return
     */
    @GetMapping("/orgWorkTime/queryOrgWorkTime")
    JsonResultDto queryOrgWorkTime(@RequestParam("empId") Integer empId);

    /**
     * 考勤统计
     * @param empId
     * @param date
     * @return
     */
    @GetMapping("/empPunch/countPunch")
    JsonResultDto countPunch(@RequestParam("empId") Integer empId,@RequestParam("date") String date);

    /**
     * 考勤详情
     * @param empId
     * @param date
     * @return
     */
    @GetMapping("/empPunch/punchDetail")
    JsonResultDto punchDetail(@RequestParam("empId") Integer empId,@RequestParam("date") String date);

    /**
     * 员工打卡
     * @param empPunchParamsDto
     * @return
     */
    @PostMapping("/empPunch/empPunch")
    JsonResultDto empPunch(EmpPunchParamsDto empPunchParamsDto);

    /**
     * 获取用户当天考勤信息
     * @param empId
     * @param punchDate
     * @return
     */
    @GetMapping("/empPunch/queryEmpPunchDay")
    JsonResultDto queryEmpPunchDay(@RequestParam("empId") Integer empId,@RequestParam("punchDate") String punchDate);

    /**
     * 身份认证
     * @param empInfo
     * @return
     */
    @GetMapping("/emp/realNameAuthentication")
    JsonResultDto realNameAuthentication(Map<String,Object> empInfo);

    /**
     * 意见反馈
     * @param feedback
     * @return
     */
    @PostMapping("/feedback/saveMemAgencyFavourite")
    JsonResultDto saveMemAgencyFavourite(SysFeedbackDO feedback);

    /**
     * 保存体检
     * @param empId
     * @param urlList
     * @return
     */
    @GetMapping("/sysEmpAtt/saveHealthReport")
    JsonResultDto saveHealthReport(@RequestParam("empId")Integer empId, @RequestParam("urlList") String[] urlList);

    /**
     * 删除体检报告
     * @param empId
     * @param attId
     * @return
     */
    @GetMapping("/sysEmpAtt/deleteHealthReport")
    JsonResultDto deleteHealthReport(@RequestParam("empId")Integer empId,@RequestParam("attId") Integer attId);

    /**
     * 查询近一年的体检报告
     * @param empId
     * @return
     */
    @GetMapping("/sysEmpAtt/queryHealthReport")
    JsonResultDto queryHealthReport(@RequestParam("empId")Integer empId);

    /**
     * 添加好友
     * @param userHxId
     * @param friendHxId
     * @return
     */
    @GetMapping("/emp/addFriend")
    JsonResultDto addFriend(@RequestParam("userHxId") String userHxId,
                            @RequestParam("friendHxId") String friendHxId);

    /**
     * 删除好友
     * @param userHxId
     * @param friendHxId
     * @return
     */
    @GetMapping("/emp/deleteFriend")
    JsonResultDto deleteFriend(@RequestParam("userHxId") String userHxId,@RequestParam("friendHxId") String friendHxId);

    /**
     * 获取好友列表
     * @param userHxId
     * @return
     */
    @GetMapping("/emp/queryFriendList")
    JsonResultDto queryFriendList(@RequestParam("userHxId") String userHxId);

    /**
     * 查询单个用户
     * @param userHxId
     * @return
     */
    @GetMapping("/emp/queryHxUser")
    JsonResultDto queryHxUser(@RequestParam("userHxId") String userHxId);

    /**
     * 搜索好友
     * @param keyword
     * @return
     */
    @GetMapping("/emp/searchFriend")
    JsonResultDto searchFriend(@RequestParam("keyword") String keyword);

    /**
     * 环信注册
     * @param userId
     * @return
     */
    @GetMapping("/login/huanxinRegister")
    JsonResultDto huanxinRegister(@RequestParam("userId") Integer userId);

    /**
     * 环信强制下线
     * @param userHxId
     */
    @GetMapping("/login/huanxinDisconnect")
    void huanxinDisconnect(@RequestParam("userHxId") String userHxId);
}
